package com.tracelog.core.handler;

import com.tracelog.core.model.LogRecord;

import java.lang.reflect.Method;

/**
 * 日志处理器接口
 *
 * @author tracelog
 * @since 1.0.0
 */
public interface LogHandler {

    /**
     * 创建日志记录
     *
     * @param method      方法
     * @param targetClass 目标类
     * @return 日志记录
     */
    LogRecord createLogRecord(Method method, Class<?> targetClass);

    /**
     * 处理请求信息
     *
     * @param logRecord 日志记录
     */
    void processRequestInfo(LogRecord logRecord);

    /**
     * 处理响应信息
     *
     * @param logRecord   日志记录
     * @param returnValue 返回值
     */
    void processResponseInfo(LogRecord logRecord, Object returnValue);

    /**
     * 处理异常信息
     *
     * @param logRecord 日志记录
     * @param e         异常
     */
    void processExceptionInfo(LogRecord logRecord, Throwable e);

    /**
     * 是否需要记录日志
     *
     * @param method      方法
     * @param targetClass 目标类
     * @return 是否需要记录
     */
    boolean shouldLog(Method method, Class<?> targetClass);
} 